package com.emergency.assist.service.impl;

import com.emergency.assist.dao.DistributeDao;
import com.emergency.assist.dao.OrderAssignDao;
import com.emergency.assist.domain.OrderAssign;
import com.emergency.assist.domain.Resource;
import com.emergency.assist.service.DistributeService;
import com.emergency.base.domain.Order;
import com.emergency.base.domain.Plan;
import com.emergency.base.domain.PlanDetail;
import com.emergency.common.util.CommonUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by qiuyan.pei on 2020/4/2.
 * 思路：用户输入事故等级，地理环境，所需军队
 * 给出需要出动的车辆数量、物资数量、人员数量
 * 方法1：导入数量
 * 方法2：调用所需数量
 */
@Service
public class DistributeServicempl implements DistributeService {

    @Autowired
    private DistributeDao distributeDao;
    @Autowired
    private OrderAssignDao orderAssignDao;

    private final static Logger logger = LoggerFactory.getLogger(RouteServiceImpl.class);

    public Resource defineDistribute(int grade) {//针对事故等级，地理环境，所需军队 赋以 车辆数量、物资数量、人员数量的值
        //是不需要调用的方法，是底层写入数据库
        Resource resource = new Resource();
      /*
      * 等级4级0-100人 车0-5辆 物资0-1吨 如果资源不够，弹出警示框
      * 等级3级100-200人 车5-10辆 物资1-2吨
      * 等级2级 200-300人 车10-15辆 物资2-3吨
       * 等级1级 300-400人 车15-20辆 物资3-4吨
       * */

        if (grade == 4) {
            resource.setRescuer("100");
            resource.setVehical("5");
            resource.setFood("1吨");
        }
        if (grade == 3) {
            resource.setRescuer("200");
            resource.setVehical("10");
            resource.setFood("2吨");
        }
        if (grade == 2) {
            resource.setRescuer("300");
            resource.setVehical("15");
            resource.setFood("3吨");
        }
        if (grade == 1) {
            resource.setRescuer("400");
            resource.setVehical("20");
            resource.setFood("4吨");
        }
        return resource;
    }

    @Override
    public List<Resource> getDistribute(int grade, int environment, int army) {

        List<Resource> resource = distributeDao.findByParam(grade, environment, army);

        return resource;
    }

    //定义一个方法，该方法给出scenar,然后返回planid 一样的所有信息
    public Plan schemeQuery(long scenarId) {

       if (CommonUtils.isNullOrEmpty(scenarId)) {//如果浏览器输入的是空值
            logger.info("输入信息为空！");
            return null;
        }

//        PlanDetail planDetail = new PlanDetail();
//        Plan plan = new Plan();

        Plan plan = distributeDao.findByScenar(scenarId);//找符合scenarId的plan表
       plan.setPlanDetails(distributeDao.findByPlan(plan.getId()));//根据plan表读取PlanDetail，然后放到plan表的detail字段里



        return plan;

    }

    @Override
    //public OrderAssign orderAssign(String orderID) {
        //return null;
    //}

    //定义一个方法，根据ordername给出调度方案
    public List<OrderAssign>  orderAssignPeople(long orderId) {


        if (CommonUtils.isNullOrEmpty(orderId)) {//如果浏览器输入的是空值
            logger.info("输入信息为空！");
            return null;
        }

        List<OrderAssign> orderAssignList=orderAssignDao.findByOrder(orderId);//根据orderId读取OrderAssign
       // orderAssignList.forEach(orderAssign -> {//
        //    orderAssign.getDispatch();
       // });
        Order order = distributeDao.findByOder(orderId);
        orderAssignList.forEach(orderAssign -> {
            orderAssign.setDescription(order.getDescription());
            orderAssignDao.save(orderAssign);
        });


        return orderAssignList;
    }
}
